/**
 ***********************************************************************************************************
 * 
 ***********************************************************************************************************
 * @file RBD3D9VertexBuffer.h
 ***********************************************************************************************************/

#ifndef __RBD3D9VERTEXBUFFER_H__
#define __RBD3D9VERTEXBUFFER_H__

#ifdef  HEADER_ONCE
#pragma HEADER_ONCE
#endif

#ifdef  HEADER_MSG
#pragma HEADER_MSG(RBD3D9VertexBuffer.h)
#endif

/***********************************************************************************************************
 * Includes
 ***********************************************************************************************************/
#include "RBMain/RBVertexBuffer.h"

/***********************************************************************************************************
 * Forward declarations
 ***********************************************************************************************************/
interface IDirect3DVertexBuffer9;
class RBD3D9Renderer;

/***********************************************************************************************************
 * Classes
 ***********************************************************************************************************/

class RBD3D9VertexBuffer : public RBVertexBuffer
{
    RBDeclareRTTI(RBD3D9VertexBuffer, RBVertexBuffer);
public:
                            RBD3D9VertexBuffer  (uint32 uiUsage, uint32 uiVertexSize, RBHardwareBufferManager* pCreator, uint32 uiVertexCount, const void* pInitData);
    virtual                ~RBD3D9VertexBuffer  ();

    IDirect3DVertexBuffer9* GetVB               ();

    virtual void*           Map                 (MapType eMapType);
    virtual void            Unmap               ();

    virtual void            OnReset             (bool bBeforeReset);

private:
    void                    Create              ();

private:
    IDirect3DVertexBuffer9* m_pD3DVB;
    void*                   m_pData;

};

/**************************************************************************************************************************************************************
 * 
 **************************************************************************************************************************************************************/
inline IDirect3DVertexBuffer9* RBD3D9VertexBuffer::GetVB()
{
    return m_pD3DVB;
}


/***********************************************************************************************************/

#endif // __RBD3D9VERTEXBUFFER_H__